linux嗅探命令:nmap研究(待更新)

前言

起因是连着港大的wifi没法直接通过22号端口(ssh)访问别的站点(git push),debug的时候就在想是不是什么端口被关了,想扫描一下端口(其实好像不是扫描端口的问题),连这两天看了几篇讲nmap的文章感觉很不错,顺便恶补一下我的网络知识。

nmap入门

简单介绍一下,Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反弹扫描等。下面放一点简单的指令。

  • 扫描单/多个
    # nmap 192.168.1.2 192.168.1.5 192.168.1.19-192.168.1.25

  • 扫描整个子网
    # nmap 192.168.1.1/24

  • 扫描文件里面的ip
    # nmap -iL target.txt

  • 扫描除过某一个ip外的所有子网主机,命令:
    # nmap192.168.1.1/24-exclude192.168.1.1

  • 扫描特定主机上的80,21,23端口,命令如下
    # nmap-p80,21,23192.168.1.1
    比较实用的还有以下三个:

  • SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快(Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。):
    # nmap -sS 192.168.32.0/24
  • 当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:
    # nmap -sT 192.168.32.0/24
  • UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口(UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的):
    # nmap -sU 192.168.32.0/24

  • FIN scan (sF)有时候Tcp SYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.FIN扫描也不会在目标主机上创建日志(FIN扫描的优势之一).个类型的扫描都是具有差异性的,FIN扫描发送的包只包含FIN标识,NULL扫描不发送数据包上的任何字节,XMAS扫描发送FIN、PSH和URG标识的数据包.

  • 版本检测(sV)是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCP SYN扫描开放了哪些端口.
    # nmap -sV 192.168.1.1

  • Idle scan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包. Idle scan是一种理想的匿名扫描技术,通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口
    # nmap -sL 192.168.1.6 192.168.1.1

有需要其它的扫描技术,如FTP bounce(FTP反弹), fragmentation scan(碎片扫描), IP protocol scan(IP协议扫描),以上讨论的是几种最主要的扫描方式.

  • Nmap的OS检测(O).Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。

Ident扫描(Ident Scanning)

一个攻击者常常寻找一台对于某些进程存在漏洞的电脑。比如,一个以root运行的WEB服务器。如果目标机运行了identd,一个攻击者使用Nmap通过”-I”选项的TCP连接,就可以发现哪个用户拥有http守护进程。我们将扫描一个Linux WEB服务器为例:

# nmap -sT -p 80 -I -O www.yourserver.com
返回

1
2
3
4
5
6
7
8
9
10
Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on www.yourserver.com (xxx.xxx.xxx.xxx):
Port State Protocol Service Owner
80 open tcp http root
TCP Sequence Prediction: Class=random positive increments
Difficulty=1140492 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.1.132; 2.2.0-pre1 - 2.2.2
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

如果你的WEB服务器是错误的配置并以root来运行,象上例一样,它将是黎明前的黑暗。

Apache运行在root下,是不安全的实践,你可以通过把/etc/indeed.conf中的auth服务注销来阻止ident请求,并重新启动ident。另外也可用使用ipchains或你的最常用的防火墙,在网络边界上执行防火墙规则来终止ident请求,这可以阻止来路不明的人探测你的网站用户拥有哪些进程。

Nmap的操作系统指纹识别技术:

  • 设备类型(路由器,工作组等)
  • 运行(运行的操作系统)
  • 操作系统的详细信息(操作系统的名称和版本)
  • 网络距离(目标和攻击者之间的距离跳)

如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。

# nmap -O -PN 192.168.1.1/24

以上命令告诉发信主机远程主机是存活在网络上的,所以没有必要发送ping请求,使用-PN参数可以绕过PING命令,但是不影响主机的系统的发现.

Nmap的操作系统检测的基础是有开放和关闭的端口,如果OS scan无法检测到至少一个开放或者关闭的端口,会返回以下错误: www.2cto.com

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

OS Scan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口.

这种情况是非常不理想的,应该是远程主机做了针对操作系统检测的防范。如果Nmap不能检测到远程操作系统类型,那么就没有必要使用-osscan_limit检测。

想好通过Nmap准确的检测到远程操作系统是比较困难的,需要使用到Nmap的猜测功能选项, –osscan-guess 猜测认为最接近目标的匹配操作系统类型。

# nmap -O --osscan-guess 192.168.1.1

Manual

HOST DISCOVERY:

-sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现,/24的话会列出所有255个IP,且无法配合高级功能如port scaning, OS detection, ping scanning
-sn: Ping Scan 只进行主机发现,不进行端口扫描 (=-sP)发送一个ICMP echo和一个TCP ACK, 主机对任何一种的响应都会被Nmap得到.
-Pn: Treat all hosts as online -- skip host discovery(sL+扫端口)
-PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports(使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现)
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes(使用ICMP echo, timestamp, and netmask 请求包发现主机)
-PO[protocol list]: IP Protocol Ping
-n/-R: Never do DNS resolution/Always resolve 

其中,比较常用的使用的是-sn,表示只单独进行主机发现过程;-Pn表示直接跳过主机发现而进行端口扫描等高级操作(如果已经确知目标主机已经开启,可用该选项);-n,如果不想使用DNS或reverse DNS解析,那么可以使用该选项。

SCAN TECHNIQUES:

-sS/sT/sA/sW/sM: TCP SYN(Stealth Scanning发送SNY后收到ACK+SYN,发送RST不完成握手不留痕迹/Connect()(Port Scanning)/ACK/Window/Maimon scans
-sU: UDP
-sN/sF/sX: TCP Null, FIN(绕过防火墙用), and Xmas(FIN+PSH+URG) scans
--scanflags <flags>: Customize TCP scan flags(待理解)
-sI <zombie host[:probeport]>: Idle scan(待理解)
-sY/sZ: SCTP INIT/COOKIE-ECHO scans(待理解)
-sO: IP protocol scan

PORT SPECIFICATION AND SCAN ORDER:

-p <port ranges>: Only scan specified ports
Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(S是什么?)
--exclude-ports <port ranges>: Exclude the specified ports from scanning
-F: Fast mode - Scan fewer ports than the default scan(只扫描service file里面的ports)
-r: Scan ports consecutively - don't randomize (随机其实比较好)

SERVICE/VERSION DETECTION:

-sV: Probe open ports to determine service/version info

OS DETECTION:

-O: Enable OS detection

FIREWALL/IDS EVASION AND SPOOFING:

-f; --mtu <val>: fragment packets (optionally w/given MTU)
-D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
-S <IP_Address>: Spoof source address
-e <iface>: Use specified interface
-g/--source-port <portnum>: Use given port number
--proxies <url1,[url2],...>: Relay connections through HTTP/SOCKS4 proxies
--data <hex string>: Append a custom payload to sent packets
--data-string <string>: Append a custom ASCII string to sent packets
--data-length <num>: Append random data to sent packets
--ip-options <options>: Send packets with specified ip options
--ttl <val>: Set IP time-to-live field
--spoof-mac <mac address/prefix/vendor name>: Spoof your MAC address
--badsum: Send packets with a bogus TCP/UDP/SCTP checksum

OUTPUT:

-v: Increase verbosity level (use -vv or more for greater effect)
-d: Increase debugging level (use -dd or more for greater effect)
--reason: Display the reason a port is in a particular state

MISC:

-6: Enable IPv6 scanning
-A: Enable OS detection, version detection, script scanning, and traceroute

EXAMPLES:

nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80

总结

常用(自认为):

没事用-v

  • nmap -sP 获取指望内所有活着的主机
  • nmap -sP -PT22,80 host 指定22,88进行TCP”ping”
  • nmap -Pn host 扫描主机全部(常用端口)
  • nmap -sS/sT/sU/sF 不留痕迹/全链接/UDP/破防火墙 -p21,23,53,80 -O -v www.yourserver.com
  • nmap -sL 192.168.1.6 192.168.1.1 不用真实ip去扫描

Options:

  • -PT TCP”ping”
  • -P0 在缺省设置下试图扫描一个端口之前,Nmap将用TCP ping” 和 ICMP echo命令ping一个目标机,如果ICMP 和TCP的探测扫描得不到响应,目标主机或网络就不会被扫描,即使他们是运行着的。而”-P0”选项允许在扫描之前不进行ping,即可进行扫描。

参考